Field
The present disclosed embodiments relate generally to computing devices, and more specifically to frequency control of processors of computing devices.
Background
Computing devices including devices such as smartphones, tablet computers, gaming devices, and laptop computers are now ubiquitous. These computing devices are now capable of running a variety of applications (also referred to as “apps”) and many of these devices include multiple processors to process tasks that are associated with apps. In many instances, multiple processors are integrated as a collection of processor cores within a single functional subsystem. It is known that the processing load on a mobile device may be apportioned to the multiple cores. Some sophisticated devices, for example, have multiple core processors that may be operated asynchronously at different frequencies. On these types of devices, the amount of work that is performed on each processor may be monitored and controlled by a central processing unit (CPU) governor to meet workloads.
In general, the goal of CPU frequency scaling is to provide just enough CPU frequency to meet the needs of the work load on the CPU. This ensures adequate performance without wasting power and allows for a good performance/power ratio. A majority of the complexity and success of CPU frequency scaling comes from predicting the future load accurately and applying a user pre-initialized curve/heuristic function that converts a given load to a CPU frequency.
Existing CPU load prediction and CPU frequency selection algorithms have some heuristics for quickly increasing the CPU frequency in case the workload needs maximum CPU capacity. But the heuristics used in existing algorithms cannot be used too aggressively to increase the CPU frequency because that will waste a lot of power when the workload doesn't need maximum CPU frequency (or even need a much higher frequency than what the CPU is currently running at).
Due to this, when a new workload that needs a high/maximum CPU frequency starts up, the existing algorithms take a lot of time to reach very high/maximum CPU frequency if the current CPU frequency is low. This slow ramp up causes noticeable performance loss in many use cases such as launching apps or starting off an action from within an app.